///----------------------------------------------------------------------
///
/// EMC, Copyright (C) 2009 Carlos Abalde
///
/// This program is free software; you can redistribute it and/or
/// modify it under the terms of the GNU General Public License as
/// published by the Free Software Foundation; either version 2 of the
/// License, or (at your option) any later version.
///
/// This program is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
/// General Public License for more details.
///
/// You should have received a copy of the GNU General Public License
/// along with this program; if not, write to the Free Software
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
/// 02111-1307 USA
///
///----------------------------------------------------------------------

#ifndef _ERLINTERFACEUTILSUTILS_H_
#define _ERLINTERFACEUTILSUTILS_H_

#include <erl_interface.h>
#include <ei.h>

typedef unsigned char byte;

//
// i/o management
//
byte *read_cmd();
int write_cmd(byte *buf, int len);

//
// Functions to transform between memory references (usually references to C++
// objects) and Erlang terms.
//
ETERM* reference2binary(void *reference);
void* binary2reference(ETERM *binary);

void binary2bytes(ETERM *binary, byte *bytes[], unsigned int *nbytes);

char* erl_iolist_to_string(const ETERM* term, int length);

#endif
